
const callBack = {show:(param)=>{},connected:(param)=>{}};

export  function initSmartCode({show=()=>{},connected=()=>{}}){
    callBack.show = show;
    callBack.connected = connected;
    let showOrHidden = showOrHiddenScanByPortal();
    if (!showOrHidden){
        controlScanBtn(false);
        return;
    }
    let scriptElement = document.createElement('script');
    scriptElement.async=true;
    //动态引入致码sdk
    scriptElement.src=`${_ctxPath}/common/smartCode/smart-code-sdk.js`;
    scriptElement.onload=()=>{
                //如果门户开启了可以不初始化
                addBindEvent();
    }
    document.body.appendChild(scriptElement);
    
}

/**
 * 根据门户是否开启了个人扫码设置相关，是否开启或加载扫码
 */
function showOrHiddenScanByPortal(){
    var topWindow = window.getCtpTop();
    //嵌入门户、多页签模式
    if (topWindow._isPortalTop && !topWindow._isSubPortalTop ) {
        //门户上面已经有扫码枪图标时候就不用重复加载
        let element = topWindow.document.querySelector('#scanCodeBox .cap4-form__showAllowQRScan');
        let style = window.getComputedStyle(element);
        let isVisible = style.display !== 'none' && style.visibility !== 'hidden' && style.opacity !== '0';
        if (isVisible){
            //隐藏扫描，使用外部的
            controlScanBtn(false);
            return false;
        }
    }
    return true;
}

/**
 * 致码的回调事件函数，通知页面设备状态
 */
function addBindEvent(){
    window.smartCodeSdk.handlerDeviceState({
        //设备状态变化回调
        onChangeState(res){
            onScanStateChange(res.action);
        },
        //扫码关闭回调
        onCloseSmartCode(){
            controlScanBtn(false);
        },
        //扫码开启回调
        onOpenSmartCode(){
            controlScanBtn(true);
        }
    })
}

/**
 * 控制扫码按钮的显示或隐藏
 * @param show
 */
function controlScanBtn(show) {
    callBack.show(show && true)
}

/**
 * 控制扫码按钮的连接状态
 * @param state
 */
function onScanStateChange(state){
    //设备开启 or 关闭
    callBack.connected(state==='open')
}
